!> SPH 精度
module config_m

    use, intrinsic :: iso_fortran_env, only: &
        sp => real32, dp => real64, stdout => output_unit, &
        stdin => input_unit, stderr => error_unit
    implicit none
    public

    integer, parameter :: rk = dp           !! sph预设浮点精度 @todo: not compatible with single precision at this time

    real, save :: tinsert = 0.0             !! 粒子记录时间
    real, save :: tsearch = 0.0             !! 粒子搜索时间

    character(:), allocatable :: in_path    !! 输入路径
    character(:), allocatable :: out_path   !! 输出路径

    character(:), allocatable :: nick       !! 工程名
    real(rk) :: dt                          !! 时间步长
    integer :: skf                          !! 光滑核函数的指示变量
    integer :: nnps                         !! 最近相邻粒子搜索算法指示变量

    integer :: print_step                   !! 输出到屏幕的时间步间隔
    integer :: save_step                    !! 输出到磁盘的时间步间隔

    integer :: maxn                         !! 粒子总数
    integer :: max_interaction              !! 粒子最大互动数
    logical :: self_gravity                 !! 是否考虑自重, 默认值 F
    logical :: visc                         !! 是否考虑粘性, 默认值 T
    integer :: eos_form                     !! 水的EOS形式, 默认值 2

    logical :: dofile                       !! 是否使用脚本, 默认值 F
    character(:), allocatable :: lua_script !! 脚本名

end module config_m
